sonichackinfofandomcom_ru-20200214-history
Категория:Редактирование призов в мониторах
1.МОНИТОР С КОЛЬЦАМИ (ИЗМЕНЕНИЕ КОЛ-ВА КОЛЕЦ) Найдите Obj2E Потом перейдите к Obj2E_ChkRings Obj2E_ChkRings: cmpi.b #6,d0 ; does monitor contain 10 rings? bne.s Obj2E_ChkS ; if not, branch addi.w #$A,($FFFFFE20).w ; add 10 rings to the number of rings you have ori.b #1,($FFFFFE1D).w ; update the ring counter cmpi.w #100,($FFFFFE20).w ; check if you have 100 rings bcs.s Obj2E_RingSound bset #1,($FFFFFE1B).w beq.w ExtraLife cmpi.w #200,($FFFFFE20).w ; check if you have 200 rings bcs.s Obj2E_RingSound bset #2,($FFFFFE1B).w beq.w ExtraLife В СТРОКЕ addi.w #$A,($FFFFFE20).w ; add 10 rings to the number of rings you have НУЖНО ИЗМЕНИТЬ ЗНАЧЕНИЕ #$A, НА ТО КОЛ-ВО КОЛЕЦ, КОТОРОЕ ВЫ ХОТИТЕ Для этого, НУЖНО это число #$A перевести из шестнадцатеричной системы счисления в десятичную. Допустим вы хотите, чтобы монитор с десятью кольцами давал не 10, а 50 колец, для этого число 50 нужно перевести в шестнадцатеричную сисиему счисления,сделать это можно с помощью калькулятора (переводим, получилось 32), теперь вместо #$A нужно ввести #$32 (теперь монитор должен давать 50 колец). Калькулятор, который переводит числа из одной системы счисления в другую: https://numsys.ru/ 2.МОНИТОР С НЕУЯЗВИМОСТЬЮ (НЕУЯЗВИМОСТЬ ДЛИТСЯ В 2 РАЗА ДОЛЬШЕ) Перейдите к Obj2E_ChkInvinc Obj2E_ChkInvinc: cmpi.b #5,d0 ; does monitor contain invincibility? bne.s Obj2E_ChkRings ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.w #$4B0,($FFFFD032).w ; time limit for the power-up move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w tst.b ($FFFFF7AA).w ; is boss mode on? bne.s Obj2E_NoMusic ; if yes, branch move.w #$98,d0 jmp (PlaySound).l ; play invincibility music В СТРОКЕ move.w #$4B0,($FFFFD032).w ; time limit for the power-up нужно изменить значение #$4B0, воспользовавшись калькулятором, умножаем это число на 2 получилось 960, теперь изменяем #$4B0 на #$960, неуязвимость будет длится по времени в 2 раза дольше, если хотите чтобы неуязвимость длилась в 3 раза дольше, умножте число 960 (в шестнадцатеричной системе счисления hex) на 2 и т.д. ВЕЧНАЯ НЕУЯЗВИМОСТЬ ПЕРЕЙДИТЕ К СТРОКЕ move.w #$4B0,($FFFFD032).w ; time limit for the power-up И УДАЛИТЕ ЕЕ Чтобы наоборот уменьшить время неуязвимости (допустим в 2 раза), нужно разделить число 4B0 (hex) на 2 и т.д. 3.МОНИТОР С САПОГАМИ (БЫСТРЫЙ БЕГ ДЛИТСЯ В 2 РАЗА БЫСТРЕЕ) Перейдите к Obj2E_ChkShoes Obj2E_ChkShoes: cmpi.b #3,d0 ; does monitor contain speed shoes? bne.s Obj2E_ChkShield ; if not, branch move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$4B0,($FFFFD034).w ; time limit for the power-up move.w #$C00,($FFFFF760).w ; change Sonic's top speed move.w #$18,($FFFFF762).w move.w #$80,($FFFFF764).w move.w #$E2,d0 jmp (PlaySound).l ; Speed up the music ПЕРЕХОДИМ К СТРОКЕ move.w #$4B0,($FFFFD034).w ; time limit for the power-up Точно также, как и в предыдущем случае, умножаем шестнадцатеричное число 4B0 на 2 получаем 960, значение #$4B0 изменяем на #$960 и т.д. ИЗМЕНЕНИЕ СКОРОСТИ СОНИКА ВО ВРЕМЯ БЫСТРОГО БЕГА ПЕРЕХОДИМ К СТРОКЕ move.w #$C00,($FFFFF760).w ; change Sonic's top speed Чтобы увеличить скорость Соника в 2 раза, умножаем C00 на 2, получаем 1800, в 3 раза увеличиваем, нужно уже 1800 (hex) умножить на 2, получим 3000 (hex) и т.д. Чтобы уменьшить скорость Сонику в 2 раза, делим C00 на 2 и т.д. 4.МОНИТОР С ЖИЗНЬЮ (ИЗМЕНЕНИЕ КОЛ-ВА ЖИЗНЕЙ, КОТОРЫЕ ДАЕТ МОНИТОР) Перейдите к Obj2E_ChkSonic Obj2E_ChkSonic: cmpi.b #2,d0 ; does monitor contain Sonic? bne.s Obj2E_ChkShoes ; if not, branch ExtraLife: addq.b #1,($FFFFFE12).w ; add 1 to the number of lives you have addq.b #1,($FFFFFE1C).w ; add 1 to the lives counter move.w #$9F,d0 jmp (PlaySound).l ; play extra life music По умолчанию монитор с жизнью дает 1 жизнь, но это число можно изменить, для этого перейдите к строке addq.b #1,($FFFFFE12).w ; add 1 to the number of lives you have Тут не нужно переводить число, просто нужно изменить #1 на то кол-во жизней, которое вы хотите в десятичной системе счисления. МОНИТОР "S", перейдите к Obj2E_ChkS Obj2E_ChkS: cmpi.b #7,d0 ; does monitor contain 'S'? bne.s Obj2E_ChkEnd ; if not, branch ПОСЛЕ ЭТОЙ СТРОКИ, ПИШИТЕ СВОЙ СКРИПТ nop Вообще, неизвестно, для чего нужен был монитор "S", но предполагается, что этот монитор должен был давать Сонику способность превращаться в Супер Соника. Вообще, в первой части Sonic the hedgehog, нет способности Супер Соника, поэтому давайте просто сделаем так, чтобы этот монитор давал Сонику вечную неуязвимость и вечный быстрый бег.Для этого, воспользуемся уже существующими скриптами для мониторов с неуязвимостью и быстрым бегом. Переходим к Obj2E_ChkInvinc (монитор с неуязвимостью) и копируем этот скрипт: Копируем скрипт, начиная со строки move.b #1,($FFFFFE2D).w ; make Sonic invincible, и заканчивая bne.s Obj2E_NoMusic ; if yes, branch Obj2E_ChkInvinc: cmpi.b #5,d0 ; does monitor contain invincibility? bne.s Obj2E_ChkRings ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.w #$4B0,($FFFFD032).w ; time limit for the power-up move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w tst.b ($FFFFF7AA).w ; is boss mode on? bne.s Obj2E_NoMusic ; if yes, branch move.w #$98,d0 jmp (PlaySound).l ; play invincibility music ВОТ ЧТО ДОЛЖНО ПОЛУЧИТЬСЯ: Obj2E_ChkS: cmpi.b #7,d0 ; does monitor contain 'S'? bne.s Obj2E_ChkEnd ; if not, branch cmpi.b #5,d0 ; does monitor contain invincibility? bne.s Obj2E_ChkRings ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.w #$4B0,($FFFFD032).w ; time limit for the power-up move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w tst.b ($FFFFF7AA).w ; is boss mode on? bne.s Obj2E_NoMusic ; if yes, branch move.w #$98,d0 jmp (PlaySound).l ; play invincibility music nop УДАЛЯЕМ СТРОКУ move.w #$4B0,($FFFFD032).w ; time limit for the power-up Теперь переходим к Obj2E_ChkShoes Obj2E_ChkShoes: cmpi.b #3,d0 ; does monitor contain speed shoes? bne.s Obj2E_ChkShield ; if not, branch move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$4B0,($FFFFD034).w ; time limit for the power-up move.w #$C00,($FFFFF760).w ; change Sonic's top speed move.w #$18,($FFFFF762).w move.w #$80,($FFFFF764).w move.w #$E2,d0 jmp (PlaySound).l ; Speed up the music КОПИРУЕМ СКРИПТ, НАЧИНАЯ СО СТРОКИ move.b #1,($FFFFFE2E).w ; set speed shoes flag И ЗАКАНЧИВАЯ move.w #$80,($FFFFF764).w ТАКЖЕ УДАЛЯЕМ СТРОКУ move.w #$4B0,($FFFFD034).w ; time limit for the power-up ВОТ ЧТО В ИТОГЕ ДОЛЖНО ПОЛУЧИТЬСЯ Obj2E_ChkS: cmpi.b #7,d0 ; does monitor contain 'S'? bne.s Obj2E_ChkEnd ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$C00,($FFFFF760).w ; change Sonic's top speed nop Единственное, что осталось добавить (хотя это необязательно) звуковой эффект монитору или музыку, для этого добавляем этот скрипт (который можно скопировать из скриптов для других мониторов), и вот что получилось: Obj2E_ChkS: cmpi.b #7,d0 ; does monitor contain 'S'? bne.s Obj2E_ChkEnd ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$C00,($FFFFF760).w ; change Sonic's top speed move.w #$E2,d0 jmp (PlaySound).l ; nop Теперь, вместо #$E2, мы вводим код музыки, которая нам нужна, посмотреть какой код у какой музыки или звука, можно через Sound test в самой игре